A typical programming system includes hardware and software components. Hardware components are computing devices and include personal computers (PC), mainframe computers, and computing circuits, among others. The basic architecture of a computing device includes a central processing unit (CPU) which actually executes instructions and a memory unit which stores instructions and data. Instructions and data are transmitted from the memory unit to the CPU and the results of the CPU operations are sent back to the memory unit. Software components are applications programs, which contain the set of instructions that are executed by the CPU unit. The applications programs include, system programming software, word processing software, spreadsheet evaluation software, drawing software, mathematical and other scientific software, among others. The majority of computer users regard a programming system as a computing tool to perform simple or complicated tasks. Typically a user defines a problem statement and/or an objective and sets out to solve the problem and accomplish his objective by carrying out one or more tasks with the computing tool. Each interaction of the user with the computing tool defines a Task Action and is an active step towards solving the stated problem and accomplishing the objective. The objects of the Task Action are called Task Action Objects. After each interaction the user decides on the next interaction based on the result of the previous interaction and the next desirable interaction to accomplish the set objective. This process of solving a defined problem is captured in the set of instructions that are contained in the application program. A computer programmer scripts the set of instructions in a source file using the grammar rules of a programming language. In the example of FIG. 1 a programmer scripts the source file using the grammar and syntax of the JAVA™ programming language 82. The JAVA™ scripted file passes through a JAVA™ compiler 84 where it gets analyzed and parsed. The parsed file is used to generate a JAVA™ bytecode, i.e., a code that is readable by a JAVA™ virtual machine. The JAVA™ bytecode is executed by the JAVA™ virtual machine 86. JAVA™ is an object-oriented programming language. In an object-oriented programming language computation on a data object is specified by calling subprograms associated with the data object. Object-oriented application programs typically model a problem domain using an “object model” that defines classes of objects representing elements of the problem domain. A class definition defines the class in terms of the relationship of the class to other classes, the data associated with objects in the class, the operations that can be performed on objects in the class. During execution of an object-oriented application program, instances of the classes in the object model, referred to as “objects,” are produced and manipulated. Object-oriented programming languages are well known in the art and are described in “Programming languages” Chapter 11, p 435-483, edited by Robert W. Sebesta.
The development of an application program is a complicated process. This complication is a result of the large variety and complexity of the programming languages, data types, hardware types, operating system types, and program auditing techniques, among others. Software programmers are usually highly trained software engineers with many years of practical experience. Programming overall is an expensive operation. Attempts have been made to make programming languages more interpretive, so that they can be easily learned and used by programmers with no background or interest in professional software engineering or software development. However, these interpretive languages have very limited performance and have not gained acceptance in the industry. Characteristics of a “good” programming language include readability, writability and reliability. Readability is the ease with which a program can be read and understood. Writability is a measure of how easily a language can be used to create programs in a chosen domain, and a program is said to be reliable if it performs to its specifications under all conditions. Readability and writability depend upon the overall simplicity and orthogonality of the language. Simplicity requires a small number of basic components and orthogonality means that a relatively small number of primitive constructs can be combined in a relatively small number of ways to build control and data structures of the language. Adequate facilities for defining data types and structures are another aid to readability and writability. Furthermore, the syntax, or form of the basic elements of the language needs to be easily recognizable and unambiguous. Writability also depends upon abstraction and expressivity of the language. Abstraction means the ability to define and then use new and complicated structures and operations in ways that allow many details to be ignored. Expressivity refers to having powerful operators that allow a great deal of computation to be accomplished with a very small program. Reliability depends primarily upon error checking during the compiling and execution of the program and the ability to handle exceptions, i.e. the ability of a program to intercept run-time errors and to take corrective actions.
The worldwide proliferation of software tools and software applications, and the increased worldwide awareness of the versatility and problem-solving capabilities of those software tools and software applications, have led to an emerging need to be able to write software programs using words and instructions that are not limited to one spoken language. A related problem that has emerged with the worldwide marketing expansion of software programming is the need to translate software programs from their original language into the spoken language of the specific user or location where the program is used. Many software programs are developed using a programming language comprising words and instructions based in one spoken language, usually English. Although some of these programs may be written to produce messages and information in any language of choice, the logic and algorithms in those programs is usually only expressed in one language, for the most part, in English. Translating the logic and algorithms into other spoken languages for worldwide distribution is a time consuming and expensive endeavor that requires a lot of labor. In addition to the added cost, mistakes often occur during the translation of the software. These translation mistakes could result in misunderstanding of the original logic and algorithms and the translated program could perform differently than originally intended.
Accordingly, there is a need for an intuitive programming language that is suitable for multilingual programming and can be used by any programmer who can read and write in at least one spoken language. The programming language needs to be simple, but flexible enough to be used to script complicated programs, orthogonal, reliable, able to handle exceptions, easily expandable in terms of new constructs and new languages, and able to support multilingual programming without the need to recompile the original program.